【Windows故障】蓝屏究竟是咋回事

您所在的位置:网站首页 win10page fault in nonpaged area 【Windows故障】蓝屏究竟是咋回事

【Windows故障】蓝屏究竟是咋回事

2023-03-25 11:16| 来源: 网络整理| 查看: 265

0x1 计算机为什么会蓝屏

计算机蓝屏故障即蓝屏死机(Blue Screen of Death,缩写为:BSoD),又称为错误检查、系统崩溃、内核错误或停止错误,是指微软的Windows操作系统在显示器屏幕上出现蓝色报警错误信息的一种死机状态,这是因为:当Windows遇到危及系统运行的状况时,系统将暂停,如果在操作系统完整性受到威胁之后依然让操作系统继续运行,则可能会破坏数据或损害系统的安全性。

计算机蓝屏原因有很多,总的来说有两大类:硬件故障原因和软件故障原因。

据估计,大约四分之三的蓝屏是由软件故障原因引起的。而在软件故障中,只有驱动程序故障才会引发蓝屏,普通应用程序是不会引发蓝屏的。从Intel 80386开始,出于安全性和稳定性的考虑,该系列的CPU提供了ring0、ring1、ring2、ring3从高到低四个不同的特权级,对数据也提供相应的四个保护级别:ring0最高,ring3最低。运行于较低级别的代码不能随意调用高级别的代码和访问较高级别的数据,只有ring0层的代码才可以对物理硬件直接进行访问。

在Windows操作系统中,代码被分为以下两种模式:

(1)内核模式

内核模式代码可以访问所有的系统资源,包括对任何I/O设备有全部的访问权,以及访问所有虚拟地址并控制虚拟内存硬件。该模式对应80386的ring0层,操作系统的核心部分,设备驱动程序等都运行在该模式。

(2)用户模式

在用户模式中,代码在没有特权的状态下运行,对系统资源只有有限的访问权限。例如:不能直接访问硬件,硬件防止特权指令的执行,并对内存和I/O空间的访问操作进行检查,这就允许Windows限制任务对各种I/O操作的访问,并捕捉违反系统完整性的任何行为。在80386 处理器上,该模式对应于ring3层,操作系统的用户接口部分以及所有的普通应用程序都运行在该级别。

正是因为普通应用程序运行于用户模式下,ring3的特权级别,运行时受到操作系统的错误捕捉,所以,当用户模式下的应用程序出现严重错误,操作系统只会弹出“XXX已停止工作”的弹窗,不会干扰到其他正在运行的程序;而驱动程序运行于内核模式下,ring0的特权级别,所以当内核模式下的程序出现严重错误,将会导致操作系统发生停止错误,直接蓝屏。

 

0x2 确定引发蓝屏的具体原因

系统内核错误发生后,如果附加了内核调试器并处于活动状态,则系统会使错误代码中断,以便可以使用调试器调查崩溃;如果未连接调试器,则会出现一个蓝色文本屏幕,其中包含有关错误的信息。此屏幕称为蓝屏,错误检查屏幕或停止屏幕。

蓝屏显示的信息取决于错误原因,如下图:

蓝屏会显示停止代码,例如PAGE_FAULT_IN_NONPAGED_AREA。如果可用,还将显示正在执行代码的驱动模块名称,例如AcmeVideo.sys。如果此时显示了驱动模块名称,那么恭喜你,只要正常开机后或通过安全模式进入计算机,禁用或卸载该模块,或联系驱动制造商获取最新驱动以及用驱动升级软件更新驱动即可;而如果只有停止代码,则只能通过停止代码进行初步判断具体原因,停止代码的原因说明以及解决方案可以通过查阅微软开发文档得到。下面列出几个常见的停止错误代码以及初步解决方案:

CRITICAL_PROCESS_DIED(0xEF)

关键系统进程已终止,当发生这种情况时,由于这些进程对Windows的操作至关重要,因此会因为操作系统的完整性而发生系统错误检查。Windows内置的关键系统服务包括csrss.exe,wininit.exe,logonui.exe,smss.exe,services.exe,conhost.exe和winlogon.exe。如果计算机新安装了设备、系统更新或某软件,先试着卸载他们;使用急救盘检查是否有RootKit病毒;也可以使用命令“SFC /scannow”检测系统文件的完整性。

SYSTEM_THREAD_EXCEPTION_NOT_HANDLED(0x7E)

系统线程生成了错误处理程序未捕获的异常,其存在三种情况:

0x80000002:(STATUS_DATATYPE_MISALIGNMENT)表示遇到未对齐的数据引用。

0x80000003:(STATUS_BREAKPOINT)指示在没有内核调试器连接到系统时遇到断点或ASSERT。

0xC0000005:(STATUS_ACCESS_VIOLATION)指示发生了内存访问冲突。

如果在错误检查消息中标识了驱动程序,则禁用该驱动程序或更新驱动程序;除此以外,硬件不兼容,内存冲突和IRQ冲突,也会产生此错误,这种情况需要和硬件供应商联系。

DRIVER_IRQL_NOT_LESS_OR_EQUAL(0xD1)

在进程中断请求级别过高的情况下,内核模式驱动程序尝试访问可分页的内存。驱动程序的中断请求级别如果是DISPATCH_LEVEL或更高的情况下,不能访问分页内存的数据,不能执行分页内存的代码,如果在该级别或更高级别下碰了分页内存,系统马上蓝屏。检查“事件查看器”中的“系统日志”以获取其他错误消息,这些错误消息可能有助于识别导致此错误检查的驱动程序。

PAGE_FAULT_IN_NONPAGED_AREA(0x50)

已引用了无效的系统内存,一般情况下是野指针引发的,可能是由安装错误的系统服务或错误的驱动程序引起的,防病毒软件也会触发此错误,NTFS卷损坏也会触发此错误。除此以外,在安装有故障的硬件之后或在已安装的硬件发生故障的情况下(例如有故障的RAM)也可能发生这种情况。当此错误检查出现后,先检查软件方面的问题,比如驱动、服务、杀毒软件、NTFS卷等。排除软件问题后检查硬件,比如进行内存检测等。

SYSTEM_SERVICE_EXCEPTION(0x3B)

执行从非特权代码到特权代码的进程时发生了异常,并且它包含的线程是系统线程。

常见的异常包括:

0x80000003:(STATUS_BREAKPOINT)没有内核调试器连接到系统时遇到断点或ASSERT。

0xC0000005:(STATUS_ACCESS_VIOLATION)发生内存访问冲突。

遇到此错误应先去设备管理器中查看是否有标记有感叹号的设备,如果有则更新该设备的驱动程序或卸载该设备,其他排查方法同上。

除此以外,还会有其他各种各样的因素导致蓝屏,小伙伴们可以通过查阅微软开发文档了解相应的代码对应的问题以及解决方案。

 

0x3 内核模式转储文件介绍

发生内核错误时,Windows的一般行为是显示带有错误检查数据的蓝屏。但是,蓝屏所提供的信息只能够进行初级检查,如果要深入分析蓝屏的问题,仅依靠蓝屏提供的数据是无法做到的,这时候便需要让操作系统在发生内核错误的时候生成内存转储文件,再由人工分析内核转储文件找到问题核心。请注意,没有任何转储文件可以像附加到发生故障的系统的实时内核调试器一样有用和通用。

内核模式故障转储文件有五种,分别是:完全内存转储、核心内存转储、小内存转储、自动内存转储以及主动内存转储。这些转储文件的体积有大有小,完全内存转储最大,其中包含了很多信息,包括一些用户模式内存;主动内存转储体积稍小,但是在大多数情况下包含类似的信息;内核内存转储更小,通常省略了用户模式内存;自动内存转储和内核内存转储相同,但是Windows对于自动内存转储在设置系统页面文件的大小方面具有更大的灵活性;最小的是小内存转储,它的大小只有64 KB。

较大文件的优点在于它们包含更多信息,因此它们更有可能帮助分析人员找到崩溃的原因;较小文件的优点是它们体积较小,占用的空间更少,写入速度更快。

那么如何启动Windows的内存转储文件的生成呢?小伙伴们可以去“控制面板>系统和安全>系统”选择“高级系统设置”,找到“启用故障和恢复”,点击“设置”,在“写入调试信息”下,小伙伴们可以指定内核模式转储文件设置,对于任何给定的崩溃,只能创建一个转储文件;下面的“转储文件目录”就是转储文件生成的位置。启动内存转储文件后,Windows再次崩溃时,重新进入系统后便可以在指定路径下获得转储文件并交给有能力的人深入分析蓝屏的原因。

 

0x4 参考文献

[1]王伟.计算机蓝屏故障分析与处理研究[J].电脑知识与技术,2011,07(35):9270-9271.

[2]徐海蓉.浅谈计算机蓝屏及其处理[J].科技经济市场,2016,(9):38-39.

[3]段晓雪.探讨计算机硬件冲突及兼容性的处理方法[J].信息与电脑,2016,(2):53,58.

[4]黄华星,舒辉,谢余强,罗军宏.Win32下ring0特权级保护机制安全性研究[J].微计算机信息,2005,(21):56-57.



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3